ソフトウェアとは 〜 注2

公開: 2021年9月3日

更新: 2021年9月29日

注2. 完全なソフトウェアはあるか?

1960年代に米国で実施された「アポロ・プロジェクト」では、1969年の終わりまでに、米国の総力を挙げて、人間が登場する宇宙船を月を周回する軌道に乗せ、「月面に宇宙飛行士を立たせる」ことを目標とした壮大な事業計画でした。1969年7月20日、アポロ11号は、見事にこの目標を達成し、2人の宇宙飛行士を月面に立たせました。

この目標を達成するため、米国のNASAは、5台のコンピュータを宇宙船に乗せ、1台のコンピュータが正常に働くことがなくても、宇宙船の運行には影響が出ないようにしました。この5台のうち3台は、基本的に同じコンピュータで、同じソフトウェアを動かします。残りの2台は、全く別のコンピュータで、これらも同じソフトウェアを動かします。この2台のコンピュータは、3台の主コンピュータが行う計算の結果が、間違っていないことを確認するためのものです。

3台の主コンピュータは、同じ入力を受けて、同じ計算を行い、同じ結果を出すはずです。コンピュータの間違いで、計算結果に違い出ても、3台が同じ計算をするので、3台中2台が同じ結果を出せば、多数決で、正しいと思われる結果を選ぶことができます。あとの2台は、その選択された計算結果に間違いがないことを、別の計算方法で計算し、確認するようにしています。宇宙船に乗っている宇宙飛行士は、では、なぜ乗っているのでしょう。

実際に、宇宙船で月まで行ってみると、3台の主コンピュータが出す計算結果が、全て異なり、全く一致しないことがあります。そのような時、宇宙飛行士は、どのコンピュータの計算結果を採用するのかを決めます。実際に、宇宙飛行士たちが選ぶコンピュータの計算結果は、ほとんどの場合、正しい結果であったと言われています。それは、人間の総合的な判断が、ほとんどの場合、適切であったことの証左であったと考えられています。この判断の正しさは、なぜなのでしょう。

宇宙飛行士たちは、本番の飛行の前、約6か月間の地上での、シミュレータを使った模擬飛行で、本物の宇宙船に乗り込み、昔の宇宙飛行で得られた飛行データを使い、飛行訓練を積み重ねます。そのような飛行訓練の結果として、宇宙飛行士たちは、どのコンピュータがどのような時、計算を間違えるのかを経験から学びます。そのような学習の結果から、宇宙日飛行士たちは、実際の宇宙飛行中に経験する、コンピュータの計算結果の不一致に関する準備をしていたと言えます。

さらに、宇宙飛行士たちは、人間の超能力を使った訓練も受けます。地上のセンターとの通信ができなくなった時、宇宙飛行士たちは、自分達だけで、どのコンピュータの計算結果を選ぶかを決めなければなりません。そのような場合、地上のセンターでは、専門家たちがどのコンピュータの計算結果が、最も良さそうかを選び、それを地上の超能力者が「念じ」て、宇宙船の飛行士たちに伝えます。宇宙飛行士たちは、訓練の結果、かなりの確率で、地上の超能力者が念じた選択を当てられるようになるそうです。

特に、宇宙船が、地上から見て月の裏側を飛行している時、電波は宇宙船に届きません。超能力による意思の伝達は、このような状況でも、地上での検討の結果を、宇宙船上の飛行士に伝えるための準備でした。地球上では、北極海の氷の下に潜っている原子力潜水艦と、アメリカ合衆国内の基地にいる宇宙飛行士たちとの間で、意志の疎通を行うのです。経験的には、宇宙飛行士たちは、訓練を積むことで、「エスパー」と呼ばれる超能力者が念じた情報を、2分の1以上の確率で受け取ることができるようになるそうです。

アポロ・プロジェクトでは、アポロ11号までに、少なくとも10回の実験飛行を行い、色々な故障や事故を経験して、ソフトウェアを少しずつ改良しました。ソフトウェアは、最初から完全ではないとしても、10回の実験飛行を積み重ねても、まだ、間違いは残っていました。宇宙船に人間をのせる意味は、不完全なソフトウェアでも、不完全な人間と協力し合うことで、より「完全に近い」動作を行わせることができる点にありました。

アポロ11号が飛行した時、搭載されていた主コンピュータで動いていたソフトウェアには、千行当り約1個の誤りが残っていたと推定されていました。当時の技術では、残っている誤りを少なくする方法は、開発者たちがお互いに作ったプログラムを読み合わせることと、一人のプログラマが一度に作成するプログラムを60行程度に限定すること、プログラムを書く時に使う変数の数や、名前の決め方に、一定の規則を決めることなどでした。これらの約束事によって、プログラムの読み合わせをやり易くし、誤りがあった時に発見し易くしていました。

昔風の機械仕掛けの道具であれば、このようなことはありません。同じ入力であれば、機械の動きはいつも同じだからです。ソフトウェアは、過去の計算過程の記憶も参考にして、機械にはできないような複雑な計算もできますが、その過去の記憶によって、計算結果が違ってくることがあります。つまり、問題が起こるまでに、どのような入力に対する計算をしてきたのかが、最後の入力に対する計算結果として、どのような出力を出すのかが決まるからです。この性質が、ソフトウェアが正しく動くかどうかを確認することを難しくします。

さらに、コンピュータを使った製品やシステムに問題が発生したとき、その原因がどこにあるのかを見きわめることは、ソフトウェアを使った場合、極めて難しくなります。それは、問題を発生させた原因が、計算機械であるコンピュータにあるのか、それを動かしているソフトウェアにあるのか、それともコンピュータによって制御される様々な機械にあるのか、などを明確に切り分けるが難しいからです。さらに、そのような製品やシステムを動かしているのが人間である場合、コンピュータを含む機械システム側の原因なのか、人間による操作に原因があるのかを調べなければなりません。

コンピュータが重要な役割を担っている最近の飛行機では、このような問題を分析しやすくするため、パイロットの操作・動作の記録を採るための記録器、各装置の動きを知るための入力信号と出力信号の記録などを採るための記録器を搭載しています。それらは、飛行機の機体を製造する企業が特別に設計・製造するものではなく、独立した組織や団体が準備し、装着するする記録器でなければなりません。それは、機体の製造企業と、記録器の製造企業が同じだとすると、機体の製造企業だけが、問題発生時の状況を知ることができることになるからです。

事故が発生した場合、その原因を究明し、その結果に基づいて、社会的責任を問うための裁判が行われます。そのような裁判を行うことは、近代以降の民主主義国家においては、同じような事故の再発を防ぐために必要なことでしょう。そのような裁判を公正に行うためには、原因究明のための公正な情報を収集することが、必要不可欠な前提になります。さらに、そのような公正な手段で得られる情報を、公平な第三者の立場にある専門家集団が分析することが重要です。米国の国家交通安全局のような専門的な組織が必要になります。

現在、日本の社会には、そのような制度や、組織、法律も存在していません。2019年に東京の池袋で発生した交通事故の原因が究明されず、「高齢の運転者がブレーキとアクセルを踏み間違えた」とする警察庁・検察庁の見解だけで、裁判の判決が導かれたことには、社会の進歩や発展を考えると、法治国家として問題が大きかったと考えます。本来であれば、実際の運転者によるペダル操作のビデオ録画などに基づく、専門家による分析を実施し、その結果を警察や検察が参考にして、裁判を行うべきだったでしょう。

似たような問題は、ロサンゼルスの高速道路で発生した日本製の高級車による、「急加速問題」の時にも起こっています。この事件にも関わらず、日本の自動車メーカは、運転者のペダルを客観的に記録する録画装置などを付加するような対応をしていません。飛行機で言う、「ブラック・ボックス」のような独立した装置を搭載することが必要です。そうでなければ、池袋の交通事故のように、実態が分からないにもかかわらず、「高齢運転者の認知能力低下」が事故の主たる原因であるとして、社会全体で、運転者をバッシングすることになります。もっと冷静・科学的な議論が必要です。

参考になる読み物